'use strict'

import {
	app,
	protocol,
	screen,
	BrowserWindow
} from 'electron'
import {
	createProtocol
} from 'vue-cli-plugin-electron-builder/lib'
import installExtension, {
	VUEJS_DEVTOOLS
} from 'electron-devtools-installer'

const path = require('path');
const fs = require('fs'); // 通常一起需要 fs 模块

const isDevelopment = process.env.NODE_ENV !== 'production'

// Scheme must be registered before the app is ready
protocol.registerSchemesAsPrivileged([{
	scheme: 'app',
	privileges: {
		standard: true,
		secure: true
	}
}])

async function createWindow() {
	// 获取所有显示器信息
	const displays = screen.getAllDisplays();
	console.log(displays)
	// 循环创建窗口
	for (let i = 0; i < Math.min(displays.length, 4); i++) {
		// 获取坐标与宽高
		const {
			x,
			y,
			width,
			height
		} = displays[i].workArea;

		/// 创建浏览器窗口
		const win = new BrowserWindow({
			x,
			y,
			width,
			height,
			menuBarVisible: true, // 隐藏菜单状态栏
			focusable: true, // 窗口是否可以聚焦
			frame: false, // 是否显示窗口边框
			fullScreen: true, // 是否全屏
			kiosk: true, // 是否展台模式
			contextIsolation: true, // 启用隔离（推荐）
			webSecurity: false, // 启用安全策略
			webgl: false, // 禁用非必要功能若无需 3D 渲染
			webPreferences: {
				// 使用 pluginOptions.nodeIntegration，保持此设置不变
				// 更多信息请参考 nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration
				nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION,
				contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION,
				devTools: true // 是否打开开发者工具
			}
		});

		// 开发环境与生产环境的内容不同
		if (process.env.WEBPACK_DEV_SERVER_URL) {
			// 加载连接
			await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL)
			if (!process.env.IS_TEST) win.webContents.openDevTools()
		} else {
			// 创建app
			createProtocol('app')
			// 加载主页面
			win.loadURL('app://./index.html')
			if (!process.env.IS_TEST) win.webContents.openDevTools()
		}
	}
}


// async function createWindow() {
// 	// Create the browser window.
// 	const win = new BrowserWindow({
// 		width: 800,
// 		height: 600,
// 		webPreferences: {
// 			// preload: path.join(__dirname, "preload.js"),
// 			webSecurity: false, // 是否启用安全策略
// 			// Use pluginOptions.nodeIntegration, leave this alone
// 			// See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info

// 			nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION,
// 			contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION
// 		}
// 	})

// 	if (process.env.WEBPACK_DEV_SERVER_URL) {
// 		// Load the url of the dev server if in development mode
// 		await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL)
// 		if (!process.env.IS_TEST) win.webContents.openDevTools()
// 	} else {
// 		createProtocol('app')
// 		// Load the index.html when not in development
// 		// await win.loadURL("http://localhost:8080")
// 		win.loadURL('app://./index.html')
// 		if (!process.env.IS_TEST) win.webContents.openDevTools()
// 	}
// }

// Quit when all windows are closed.
app.on('window-all-closed', () => {
	// On macOS it is common for applications and their menu bar
	// to stay active until the user quits explicitly with Cmd + Q
	if (process.platform !== 'darwin') {
		app.quit()
	}
})

app.on('activate', () => {
	// On macOS it's common to re-create a window in the app when the
	// dock icon is clicked and there are no other windows open.
	if (BrowserWindow.getAllWindows().length === 0) createWindow()
})

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', async () => {
	if (isDevelopment && !process.env.IS_TEST) {
		// Install Vue Devtools
		try {
			await installExtension(VUEJS_DEVTOOLS)
		} catch (e) {
			console.error('Vue Devtools failed to install:', e.toString())
		}
	}
	createWindow()
})

// Exit cleanly on request from parent process in development mode.
if (isDevelopment) {
	if (process.platform === 'win32') {
		process.on('message', (data) => {
			if (data === 'graceful-exit') {
				app.quit()
			}
		})
	} else {
		process.on('SIGTERM', () => {
			app.quit()
		})
	}
}